package com.laixu.aspect;

import org.aspectj.lang.annotation.Before;

public class LoggingAspect {

    // 前置通知
    @Before("execution(* com.laixu.service.BookService.*(..))")
    public void beforeAdvice() {
        System.out.println("[前置通知] 方法执行前记录日志");
    }

    // 后置通知（返回后）
    public void afterReturningAdvice(Object result) {
        System.out.println("[后置通知] 方法返回结果：" + result);
    }

    // 最终通知（无论是否异常）
    public void afterFinallyAdvice() {
        System.out.println("[最终通知] 方法执行结束");
    }

    // 异常通知
    public void afterThrowingAdvice(Exception ex) {
        System.out.println("[异常通知] 发生异常：" + ex.getMessage());
    }

    // 环绕通知
    public Object aroundAdvice(org.aspectj.lang.ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("[环绕通知] 方法执行前");
        try {
            Object result = joinPoint.proceed();
            System.out.println("[环绕通知] 方法执行后");
            return result;
        } catch (Exception e) {
            System.out.println("[环绕通知] 捕获异常");
            throw e;
        }
    }
}